package com.kangye.learnteacher.controller;

import com.github.pagehelper.PageInfo;
import com.kangye.learnteacher.entity.Role;
import com.kangye.learnteacher.entity.User;
import com.kangye.learnteacher.service.UserService;
import com.kangye.learnteacher.util.DownloadFileUtil;
import com.kangye.learnteacher.util.ExcelImportUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.core.io.ClassPathResource;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;

/**
 * (User)表控制层
 *
 * @author makejava
 * @since 2021-05-17 16:04:38
 */
@RestController
@CrossOrigin
@RequestMapping("student")
public class UserController {
    /**
     * 服务对象
     */
    @Resource
    private UserService userService;

    /**
     * Excel 版本验证
     */
    @Autowired
    private ExcelImportUtils excelImportUtils;

    /**
     * 下载工具类
     */
    @Autowired
    private DownloadFileUtil downloadFileUtil;

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    @RequestMapping("selectOne")
    public User selectOne(Integer id){
        User user = userService.queryById(id);
        return user;
    }
    /**
     * 查询多条数据
     *
     * @param page  当前页
     * @param limit 每页显示条数
     * @param user 实例列表
     * @return 多条数据
     */
    @RequestMapping("findAll")
    public Object selectAll(int page, int limit, User user){

        user.setUserRoleId(3);
        /**
         * map集合，存储json列表
         */
        Map<String,Object> map = new HashMap<>();
        /**
         * 判断page是否等于0
         */
        if (page == 0){
            page = 1;
        }
        PageInfo info = userService.queryAllByLimit(page, limit,user);
        /**
         * 判断数据是否存在
         */
        if (info == null){
            map.put("code",-1);
            map.put("data","查无相关数据");
        }else {
            map.put("code", 0);
            map.put("count", info.getTotal());
            map.put("limit", info.getPageSize());
            map.put("data", info.getList());
        }
        return map;
    }
    /**
     * 新增数据
     *
     * @param user 实例对象
     * @return 添加状态
     */
    @RequestMapping("insert")
    public Object insert(User user){
        /**
         * map集合，存储json列表
         */
        Map<String,Object> map = new HashMap<>();
        user.setUserCreateTime(new Date());
        boolean fage = this.userService.insert(user);
        if (fage){
            map.put("code",0);
            map.put("data","添加成功");
        }else {
            map.put("code",-1);
            map.put("data","添加失败");
        }
        return map;
    }
    /**
     * 修改数据
     *
     * @param user 实例对象
     * @return 修改状态
     */
    @RequestMapping("update")
    public Object update(User user){
        /**
         * map集合，存储json列表
         */
        Map<String,Object> map = new HashMap<>();
        boolean fage = this.userService.update(user);
        if (fage){
            map.put("code",0);
            map.put("data","修改成功");
        }else {
            map.put("code",-1);
            map.put("data","修改失败");
        }
        return map;
    }
    /**
     * 删除数据
     *
     * @param id    主键
     * @return 删除状态
     */
    @RequestMapping("delete")
    public Object delete(int id){
        /**
         * map集合，存储json列表
         */
        Map<String,Object> map = new HashMap<>();
        boolean fage = this.userService.deleteById(id);
        if (fage){
            map.put("code",0);
            map.put("data","删除成功");
        }else {
            map.put("code",-1);
            map.put("data","删除失败");
        }
        return map;
    }

    /**
     * 年级查询
     * @param gradeId   主键
     * @return 集合列表
     */
    @RequestMapping("gradeList")
    public List gradeList(Integer gradeId){
         return userService.gradeList(gradeId);
    }

    /**
     * 角色查询
     * @param roleId    主键
     * @return  集合列表
     */
    @RequestMapping("roleList")
    public List<Role> roleList(Integer roleId){
        return userService.roleList(roleId);
    }

    /**
     * 下载模板
     */
    @RequestMapping("/down/excel")
    public void downloadexcel(HttpServletResponse resp) {
        //获取student.xlsx文件(模板)
        ClassPathResource cpr = new ClassPathResource("/student.xlsx");
        String fileName = "学生导入模板.xlsx";
        downloadFileUtil.download(cpr, fileName, resp);

    }

    /**
     *  上传模板
     * */
    @RequestMapping("/upload")
    public Object upload(MultipartFile file) {

        //判断文件是否为空
        if (file == null) {
            return "文件不能为空";
        }

        //获取文件名
        String fileName = file.getOriginalFilename();
        System.out.println("fileName:"+fileName+";file:"+file);
        //验证文件名是否合格
        if (!excelImportUtils.validateExcel(fileName)) {
            return "文件类型错误!请重新下载模板";
        }

        //进一步判断文件内容是否为空（即判断其大小是否为0或其名称是否为null）
        long size = file.getSize();
        if (fileName.isEmpty() || size == 0) {
            return "文件不能为空";
        }

        //批量导入
        String message = userService.batchImport(fileName, file);
        Map<String,Object> map =new HashMap<>();
        map.put("msg",message);
        return map;
    }
}
